/** Data Access Object é um padrão para persistência de dados que permite separar regras de negócio 
 * das regras de acesso a banco de dados. Numa aplicação que utilize a arquitetura MVC, 
 * todas as funcionalidades de bancos de dados, tais como obter as conexões, 
 * mapear objetos Java para tipos de dados SQL ou executar comandos SQL, 
 * devem ser feitas por classes de DAO.*/
package daos;

import conexao.ConexaoBD;
import domain.Usuario;
import java.sql.SQLException;

public class LoginDAOS {

    static String loginC;
    static int idLog;

    /**
     * Classe de inserçao de cadastro
     * @param login - É necessario passar objeto login de Usuario
     * @return - Retorna se foi efetuado o cadastro ou não
     * @throws SQLException - Tratamento de exceção
     */
    public static int idLog() {
        return idLog;
    }

    public static int insertLogin(Usuario login) throws SQLException {
        int id = 0;
        ConexaoBD.getConnection();

        String sql = " Insert into usuario "
                + " (nick, email) "
                + " values ('" + login.getNick().trim()
                + "','" + login.getEmail().trim() + "')";
        System.out.println(sql);
        int resultado = ConexaoBD.executaInsertUpdateDelete(sql);
        if (resultado == 1) {
            String select = "Select max(idUsuario) as maximum from usuario";
            ConexaoBD.executaSelect(select);

            if (ConexaoBD.rs.next()) {
                id = ConexaoBD.rs.getInt("maximum");
                System.out.println("ID: " + id);
            }
            sql = " Insert into pessoa "
                    + " (idLogin, login, senha, nome) "
                    + " values (" + id + ",'" + login.getLogin().trim()
                    + "','" + login.getSenha().trim()
                    + "','" + login.getNome().trim() + "')";
            resultado = ConexaoBD.executaInsertUpdateDelete(sql);
        }
        ConexaoBD.closeConnection();
        return resultado;
    }

    public static int alteraLogin(Usuario login) throws SQLException {
        ConexaoBD.getConnection();

        String sql = " update usuario set"
                + " nick='" + login.getNick().trim()
                + "',email='" + login.getEmail().trim() + "' where idUsuario=" + idLog;
        System.out.println(sql);
        int resultado = ConexaoBD.executaInsertUpdateDelete(sql);
        if (resultado == 1) {
            sql = " update pessoa set"
                    + " login='" + login.getLogin().trim()
                    + "',senha='" + login.getSenha().trim()
                    + "', nome='" + login.getNome().trim() + "' where idLogin=" + idLog;
            resultado = ConexaoBD.executaInsertUpdateDelete(sql);
        }
        ConexaoBD.closeConnection();
        return resultado;
    }

    public static int Login(String login, String senha) {
        int result = 0;
        String log = "", sen = "";
        try {
            ConexaoBD.getConnection();
            String sql = "Select * from pessoa where login= '" + login + "'";
            ConexaoBD.executaSelect(sql);
            if (ConexaoBD.rs.next()) {
                log = (ConexaoBD.rs.getString("login"));
                sen = (ConexaoBD.rs.getString("senha"));
                idLog = (ConexaoBD.rs.getInt("idLogin"));
            }
            loginC = log;
            System.out.println(sql);
            ConexaoBD.closeConnection();
            if (log.equalsIgnoreCase(login) && sen.equalsIgnoreCase(senha)) {
                result = 1;
            }
        } catch (Exception erro) {
            System.out.println(erro);
            result = 0;
        }
        return result;

    }

    public static Usuario consultLogin() {
        Usuario login = new Usuario();
        int id = 0;
        try {
            ConexaoBD.getConnection();
            String sql = "Select * from pessoa where  login ='" + loginC + "'";
            ConexaoBD.executaSelect(sql);
            if (ConexaoBD.rs.next()) {
                login.setLogin(ConexaoBD.rs.getString("login"));
                login.setSenha(ConexaoBD.rs.getString("senha"));
                login.setNome(ConexaoBD.rs.getString("nome"));
                id = (ConexaoBD.rs.getInt("idLogin"));
            }
            System.out.println(sql);

            String sql2 = "Select * from usuario where idUsuario = " + id;
            ConexaoBD.executaSelect(sql2);
            if (ConexaoBD.rs.next()) {
                login.setNick(ConexaoBD.rs.getString("nick"));
                login.setEmail(ConexaoBD.rs.getString("email"));
            }
            System.out.println(sql2);

            ConexaoBD.closeConnection();
        } catch (Exception erro) {
            System.out.println(erro);
        }
        return login;
    }

    public static int excluirConta(String log, String senha) {
        ConexaoBD.getConnection();
        int resultado = 0;
        String sql = " delete from pessoa where login = '" + log + "' and senha='" + senha + "'";
        resultado = ConexaoBD.executaInsertUpdateDelete(sql);
        if (resultado == 1) {
            sql = " delete from usuario where idUsuario = " + idLog;
            resultado = ConexaoBD.executaInsertUpdateDelete(sql);
        }
        return resultado;
    }
}
